package com.khotyn.heresy.dao;

import java.util.List;

import com.khotyn.heresy.bean.RegisterBean;
import com.khotyn.heresy.bean.UserBrief;
import com.khotyn.heresy.bean.UserDetail;
import com.khotyn.heresy.bean.UserLogin;
/**
 * User DAO
 * 修改：2009.4.30增加更新用户各种信息的函数，查询函数，用户登录信息，修改人：黄挺
 * @author 赵洁琼
 */
public interface UserDAO {
	/**
	 * 创建一个新的用户
	 * @param user
	 * @return 新记录主键
	 */
	public Integer insertUser(UserDetail user);
	
	/**
	 * 更新用户信息
	 * @param userDetail 用户Bean
	 * @return 影响行数
	 */
	public int updateUser(UserDetail userDetail);
	
	/**
	 * 更新用户登录权限
	 * @param userDetail 用户Bean
	 * @return 影响行数
	 */
	public int updateFlagLogin(UserDetail userDetail);
	
	/**
	 * 更新用户上传权限
	 * @param userDetail 用户Bean
	 * @return 影响行数
	 */
	public int updateFlagUpload(UserDetail userDetail);
	
	/**
	 * 更新用户积分
	 * @param userDetail 用户Bean
	 * @return 影响行数
	 */
	public int updateScore(Integer userID, Integer point);
	
	/**
	 * 更新用户密码
	 * @param userDetail 用户Bean
	 * @return 影响行数
	 */
	public int updatePassword(UserDetail userDetail);
	
	/**
	 * 获取用户简要信息
	 * @param userID 用户ID
	 * @return 用户Bean
	 */
	public UserBrief selectUserBriefInfoByUserId(Integer usrID);
	
	/**
	 * 根据用户昵称来查询用户
	 * @param name 用户昵称
	 * @param minRow 记录开始位置
	 * @param maxRow 记录终止位置
	 * @return 用户Bean
	 */
	public List<UserBrief> selectPagedUserBriefInfo(String userName, Integer minRow, Integer maxRow);
	
	/**
	 * 根据email来获取用户登录信息
	 * @param email 用户email
	 * @return 用户登录信息
	 */
	public UserLogin selectLoginInfoByEmail(String email);
	
	/**
	 * 根据用户名计算相似用户名的用户数量
	 * @param userName 用户名
	 * @return 用户数量
	 */
	public Integer selectUserCountByUserName(String userName);
	
	/**
	 * 插入新的注册用户
	 * @param userLogin 注册用户Bean
	 * @return 新记录主键
	 */
	public Integer insertNewRegisterUser(UserLogin userLogin);
	
	/**
	 * 注册时插入一个新的用户
	 * @param registerBean
	 * @return 新记录主键
	 */
	public Integer insertRegisterBean(RegisterBean registerBean);
	
	/**
	 * 根据用户Email地址
	 * @param email 用户Email地址
	 * @return 用户账户激活地址
	 */
	public UserDetail selectUserByEmail(String email);
	
	/**
	 * 查询一个用户的具体信息
	 * @param userID 用户ID
	 * @return 用户具体信息
	 */
	public UserDetail selectUserByUserId(Integer userID);
	
	/**
	 * 更新用户激活标记位
	 * @param user 用户Bean
	 * @return 影响行数
	 */
	public Integer updateFlagActive(UserDetail user);
	
	/**
	 * 查询用户积分
	 * @param userID 用户ID
	 * @return 用户积分
	 */
	public Integer selectUserPoint(Integer userID);
}
